// 认证工具类
export const auth = {
    // 设置token
    setToken(token) {
        localStorage.setItem('token', token)
    },

    // 获取token
    getToken() {
        return localStorage.getItem('token')
    },

    // 移除token
    removeToken() {
        localStorage.removeItem('token')
    },

    // 设置用户信息
    setUser(user) {
        localStorage.setItem('user', JSON.stringify(user))
    },

    // 获取用户信息
    getUser() {
        const user = localStorage.getItem('user')
        return user ? JSON.parse(user) : null
    },

    // 移除用户信息
    removeUser() {
        localStorage.removeItem('user')
    },

    // 检查Token是否过期（基于JWT payload中的exp字段）
    isTokenExpired(token = null) {
        const tokenToCheck = token || this.getToken()
        if (!tokenToCheck) return true

        try {
            // 解析JWT payload
            const payload = JSON.parse(atob(tokenToCheck.split('.')[1]))
            const currentTime = Math.floor(Date.now() / 1000)
            
            // 检查是否有过期时间字段
            if (payload.exp) {
                return payload.exp < currentTime
            }
            
            // 如果没有过期时间字段，认为Token有效
            return false
        } catch (error) {
            console.error('Token解析失败:', error)
            return true
        }
    },

    // 检查是否已登录且Token有效
    isAuthenticated() {
        const token = this.getToken()
        const user = this.getUser()
        
        // 基本检查：是否有token和用户信息
        if (!token || !user) {
            return false
        }
        
        // 检查Token是否过期
        if (this.isTokenExpired(token)) {
            console.log('Token已过期，清除认证信息')
            this.clearAuth()
            return false
        }
        
        return true
    },

    // 清除所有认证信息
    clearAuth() {
        this.removeToken()
        this.removeUser()
        console.log('已清除所有认证信息')
    },

    // 登录
    login(token, user) {
        this.setToken(token)
        this.setUser(user)
        console.log('用户登录成功:', user)
    },

    // 登出
    logout() {
        console.log('用户登出')
        this.clearAuth()
    },

    // 获取Token中的用户信息
    getTokenPayload(token = null) {
        const tokenToCheck = token || this.getToken()
        if (!tokenToCheck) return null

        try {
            const payload = JSON.parse(atob(tokenToCheck.split('.')[1]))
            return payload
        } catch (error) {
            console.error('Token payload解析失败:', error)
            return null
        }
    }
} 